【小ネタ】Excelで開くと文字化けするCSVファイルをコマンドで一発で直す方法
リテールアプリ共創部のるおんです。
CSVファイルをExcelで開いたら文字化けしてしまい困った経験はありませんか?
今回はその原因と、コマンド一発で解決する方法をご紹介します。動作検証環境はmacOS Sonoma 14.6.1です
先に結論
iconvコマンドを使用することで、簡単に文字コードを変換できます:
iconv -c -f utf-8 -t shift-JIS [変換元ファイル] > [変換後ファイル]
文字化けの例
以下のようなCSVファイルがあるとします。
"id","Name"
"1","テスト"
"2","テスト2"
"3","テスト3"
これをExcelで開くと...
このように文字化けしてしまうことがあります。
なぜ文字化けが起きるのか
この問題は文字コードの違いによって発生します。多くの場合:
- ExcelはShift-JISでの読み込みを期待している
- CSVファイルはUTF-8など他の文字コードでエンコードされている場合がある
この不一致により文字化けが発生します。
以下の参考記事にあるように、GUI操作でファイルを選択して直すこともできますが、「別名で保存」からShift-JISを選択できないことがあります。
また、GUI操作で毎回変換するのは手間がかかります。
対処法
iconvコマンドを使用することで、簡単に文字コードを変換できます:
iconv -c -f utf-8 -t shift-JIS [変換元ファイル] > [変換後ファイル]
各オプションの説明:
-c: 変換できない文字を無視
-f: 変換元の文字コード(今回はUTF-8)
-t: 変換先の文字コード(Shift-JIS)
例えば、Download/test.csv
に文字化けしてしまうCSVがあり、これをShift-JISに変換するには
iconv -c -f utf-8 -t shift-JIS Downloads/test_utf.csv > Downloads/result_shiftjis.csv
とすると、以下のように新しくresult_shiftjis.csv
がDownloadフォルダ内に作られており、それをExcelで開くと文字化けが解消されているのがわかります。
Donwloadsフォルダ:
Excel:
おわりに
CSVファイルの文字化けは開発でよく遭遇する問題ですが、iconvコマンドを使えば簡単に解決できます。自分はLINEミニアプリ関連の開発をすることが多いのですが、LINEのユーザー情報を取得する際にみなさんいろいろな文字や絵文字などを設定しているため、中にはShift-JISに変換できないものもあります。そのような文字列が含まれる場合GUIから変更することができなかったのですが、iconv
を使い、変更できない文字列はオプションの-c
を設定することでスキップされるので強制的にファイル全体をShift-JISに変換できました。
以上。どなたかの参考になれば幸いです。